﻿Imports System.Drawing
Imports System.IO
Imports System.Drawing.Imaging
Imports System.Runtime.Serialization.Formatters.Binary
Imports System.Text
Imports System.Security.Cryptography

Public Class Utils

#Region "Elías Baldioceda"
    ''' <summary>
    ''' Encripta el texto en formato MD5.
    ''' </summary>
    ''' <param name="p_texto">Texto a encriptar.</param>
    ''' <returns>Texto encriptado.</returns>
    ''' <remarks>Creado por: Elías Baldioceda, Fecha: 14/06/2010, Modificado: 14/06/2010</remarks>
    Public Shared Function encriptar(ByVal p_texto As String) As String
        Dim encriptado As String

        ' Encriptar texto utiizando MD5
        Dim codificar As New UnicodeEncoding()
        Dim byteTexto() As Byte = codificar.GetBytes(p_texto)
        Dim md5 As New MD5CryptoServiceProvider()
        Dim byteHash() As Byte = md5.ComputeHash(byteTexto)
        encriptado = Convert.ToBase64String(byteHash)

        ' Liberar memoria
        codificar = Nothing
        byteTexto = Nothing

        Return encriptado
    End Function

    ''' <summary>
    ''' Serializa un objeto a un arreglo de bytes.
    ''' </summary>
    ''' <param name="p_objeto">Objeto a serializar.</param>
    ''' <returns>Bytes del objeto serializado.</returns>
    ''' <remarks>Creado por: Elías Baldioceda, Fecha: 14/06/2010, Modificado: 14/06/2010</remarks>
    Public Shared Function object2Byte(ByVal p_objeto As Object) As Byte()
        Dim datos() As Byte
        Dim ms As New MemoryStream
        Dim bf As New BinaryFormatter

        ' Stream al que se serializa
        bf.Serialize(ms, p_objeto)

        ' Leer hasta el final
        datos = ms.GetBuffer()
        p_objeto = Nothing
        ms.Close()

        Return datos
    End Function

    ''' <summary>
    ''' Deseariliza los bytes y los transforma en un objeto.
    ''' </summary>
    ''' <param name="p_datos">Bytes a deserializar.</param>
    ''' <returns>Objeto resultado de los bytes deserializados.</returns>
    ''' <remarks>Creado por: Elías Baldioceda, Fecha: 14/06/2010, Modificado: 14/06/2010</remarks>
    Public Shared Function byte2Object(ByVal p_datos() As Byte) As Object
        Dim objeto As Object
        Dim bf As New BinaryFormatter
        Dim ms As New MemoryStream(p_datos)

        ' Desserializar
        objeto = bf.Deserialize(ms)

        Return objeto
    End Function
#End Region

End Class